package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * JDK5之后推出了一个新特性:增强型for循环
 * 也成为新循环。它可以用相同的语法遍历集合或数组。
 * 新循环不取代传统循环的工作，仅用来遍历集合或数组。
 * 语法:
 * for(元素类型 变量 : 集合或数组){
 *
 * }
 */
public class NewForDemo {
    public static void main(String[] args) {
        String[] array = {"one","two","three","four","five"};
        for(int i=0;i<array.length;i++){
            String str = array[i];
            System.out.println(str);
        }
        //编译器会将新循环遍历数组改为普通for循环遍历
        for(String str : array){
            System.out.println(str);
        }
        /*
            JDK5同时还推出了另一个特性:泛型
            泛型也称为参数化类型，允许我们在使用一个类时指定该类中某个属性，方法参数或
            方法返回值的类型，使得使用这个类更符合使用需求。
            泛型在集合中广泛使用，用于规定集合中的元素类型。
         */
        Collection<String> c = new ArrayList<>();
        c.add("one");
        c.add("two");
        c.add("three");
        c.add("four");
        c.add("five");
        System.out.println(c);
        //新循环遍历集合会被编译器改为迭代器遍历，因此不要在遍历过程中用集合方法增删元素!
        for(String str : c){
            System.out.println(str);
        }
        //迭代器也支持泛型，与集合泛型一致即可。
        Iterator<String> it = c.iterator();
        while(it.hasNext()){
            String e = it.next();//next获取元素时不再需要造型
            System.out.println(e);
        }

    }
}
